Custom Deserializer তৈরি এবং ব্যবহারের টেকনিক

Java Technologies - জ্যাকসন (Jackson) - Jackson এর মাধ্যমে কাস্টম Serializer এবং Deserializer তৈরি
163

Jackson আপনাকে JSON ডেটা থেকে Java অবজেক্ট তৈরি করার জন্য একটি Custom Deserializer তৈরি এবং ব্যবহার করার সুযোগ দেয়। এটি বিশেষভাবে দরকার হয় যখন JSON ফরম্যাট আপনার Java ক্লাসের সরাসরি ম্যাচ করে না বা বিশেষ ধরনের প্রক্রিয়াকরণ প্রয়োজন।


Custom Deserializer তৈরি করার ধাপ

Step 1: Maven Dependency

Jackson লাইব্রেরি যোগ করুন:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.15.2</version>
</dependency>

Step 2: JSON উদাহরণ

ধরা যাক আমাদের JSON ফরম্যাটটি নিচের মতো:

{
  "full_name": "John Doe",
  "birth_year": 1995,
  "location": {
    "city": "Dhaka",
    "country": "Bangladesh"
  }
}

আমাদের Java ক্লাসের কাঠামো ভিন্ন:

class Person {
    private String name;
    private int age;
    private String city;

    // Constructors, Getters, and Setters
    public Person(String name, int age, String city) {
        this.name = name;
        this.age = age;
        this.city = city;
    }

    // toString for display
    @Override
    public String toString() {
        return "Person{name='" + name + "', age=" + age + ", city='" + city + "'}";
    }
}

Step 3: Custom Deserializer তৈরি করা

Custom logic দিয়ে JSON ডেটা পার্স করার জন্য JsonDeserializer ক্লাসটি extend করতে হবে।

import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import com.fasterxml.jackson.databind.JsonNode;

import java.io.IOException;
import java.time.Year;

public class PersonDeserializer extends JsonDeserializer<Person> {
    @Override
    public Person deserialize(JsonParser parser, DeserializationContext context) throws IOException, JsonProcessingException {
        JsonNode node = parser.getCodec().readTree(parser);

        // Extract JSON fields
        String fullName = node.get("full_name").asText();
        int birthYear = node.get("birth_year").asInt();
        String city = node.get("location").get("city").asText();

        // Calculate age
        int currentYear = Year.now().getValue();
        int age = currentYear - birthYear;

        // Create and return Person object
        return new Person(fullName, age, city);
    }
}

Step 4: Custom Deserializer Map করা

@JsonDeserialize অ্যানোটেশন ব্যবহার করে Custom Deserializer ম্যাপ করতে হবে।

import com.fasterxml.jackson.databind.annotation.JsonDeserialize;

@JsonDeserialize(using = PersonDeserializer.class)
class Person {
    private String name;
    private int age;
    private String city;

    public Person(String name, int age, String city) {
        this.name = name;
        this.age = age;
        this.city = city;
    }

    @Override
    public String toString() {
        return "Person{name='" + name + "', age=" + age + ", city='" + city + "'}";
    }
}

Step 5: JSON থেকে Java অবজেক্টে রূপান্তর

ObjectMapper ব্যবহার করে JSON ডেটা ডেসিরিয়ালাইজ করুন।

import com.fasterxml.jackson.databind.ObjectMapper;

public class CustomDeserializerExample {
    public static void main(String[] args) throws Exception {
        String json = """
        {
          "full_name": "John Doe",
          "birth_year": 1995,
          "location": {
            "city": "Dhaka",
            "country": "Bangladesh"
          }
        }
        """;

        // ObjectMapper instance
        ObjectMapper objectMapper = new ObjectMapper();

        // Deserialize JSON to Person object
        Person person = objectMapper.readValue(json, Person.class);

        // Print the Person object
        System.out.println(person);
    }
}

Output

Person{name='John Doe', age=29, city='Dhaka'}

কীভাবে কাজ করে?

  1. Custom Deserializer (PersonDeserializer):
    • JSON ডেটা পড়ে এবং প্রয়োজনীয় প্রক্রিয়াকরণ (যেমন: জন্ম তারিখ থেকে বয়স গণনা) করে।
    • কাস্টম লজিক ব্যবহার করে Java অবজেক্ট তৈরি করে।
  2. Mapping:
    • @JsonDeserialize(using = PersonDeserializer.class) ব্যবহার করে ক্লাসটিতে Deserializer সেট করা হয়।
  3. ObjectMapper:
    • JSON ডেটা থেকে কাস্টম লজিকের মাধ্যমে Java অবজেক্ট তৈরি করে।

ব্যবহার ক্ষেত্র

  • JSON ডেটার ফরম্যাট এবং Java অবজেক্টের কাঠামো ভিন্ন হলে।
  • বিশেষ ডেটা প্রক্রিয়াকরণের প্রয়োজন হলে (যেমন: তারিখ, সময়, বা কাস্টম লজিক)।
  • বড় এবং জটিল JSON ডেটা হ্যান্ডল করতে।

Jackson এর এই ক্ষমতা আপনার প্রজেক্টে JSON প্রসেসিং অনেক সহজ এবং কার্যকর করে তুলবে।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...